#!/bin/bash

###############################################
# 端口扫描与监控脚本
# 名称：port_scan.sh
# 版本：1.1
# 作者：资深程序员
# 日期：2025-03-22
# 描述：
#   使用 nmap 或 ss 扫描开放端口并记录到日志。
#   自动检测可用工具进行扫描，并监控端口变化。
###############################################

LOG_FILE="$(dirname "$0")/port_scan.log"

# 显示帮助信息
show_help() {
    echo "用法： ./port_scan.sh [选项] [目标IP]"
    echo "选项："
    echo "  -h, --help      显示帮助信息"
    echo "  -t, --tool TOOL  指定工具 (nmap 或 ss)"
    echo "示例： ./port_scan.sh -t nmap 192.168.1.1"
}

# 检查并安装依赖
check_install() {
    local tool="$1"
    if ! command -v "$tool" &> /dev/null; then
        echo "工具 $tool 未安装，正在安装..."
        sudo apt-get update && sudo apt-get install -y "$tool"
    fi
}

# 使用 nmap 扫描端口
scan_with_nmap() {
    local target="$1"
    echo "使用 nmap 扫描 $target 的开放端口..."
    check_install "nmap"
    sudo nmap -sS -Pn "$target" | tee -a "$LOG_FILE"
}

# 使用 ss 扫描本机端口
scan_with_ss() {
    echo "使用 ss 扫描本机开放端口..."
    check_install "ss"
    sudo ss -tuln | tee -a "$LOG_FILE"
}

# 主程序入口
main() {
    local tool="nmap"
    local target="127.0.0.1"

    while [[ $# -gt 0 ]]; do
        case "$1" in
            -h|--help)
                show_help
                exit 0
                ;;
            -t|--tool)
                tool="$2"
                shift 2
                ;;
            *)
                target="$1"
                shift
                ;;
        esac
    done

    echo "开始端口扫描..." | tee -a "$LOG_FILE"
    if [ "$tool" == "nmap" ]; then
        scan_with_nmap "$target"
    elif [ "$tool" == "ss" ]; then
        scan_with_ss
    else
        echo "未知工具：$tool" | tee -a "$LOG_FILE"
    fi
    echo "端口扫描完成。" | tee -a "$LOG_FILE"
}

main "$@"
